﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Itegracion.Framework.Tool
{
    public class NumberToText
    {
        private static string ToTextCentena(int number)
        {
            string rpta = string.Empty;
            int n = number;

            int centenas = n / 100;
            n = n % 100;
            int decenas = n / 10;
            n = n % 10;
            int unidades = n;
            switch (centenas)
            {
                case 1: rpta += (decenas + unidades > 0 ? "CIENTO " : "CIEN "); break;
                case 2: rpta += "DOSCIENTOS "; break;
                case 3: rpta += "TRECIENTOS "; break;
                case 4: rpta += "CUATROCIENTOS "; break;
                case 5: rpta += "QUINIENTOS "; break;
                case 6: rpta += "SEISCIENTOS "; break;
                case 7: rpta += "SETECIENTOS "; break;
                case 8: rpta += "OCHOCIENTOS "; break;
                case 9: rpta += "NOVECIENTOS "; break;
            }
            switch (decenas)
            {
                case 1:
                    if (unidades == 1) rpta += "ONCE ";
                    else if (unidades == 2) rpta += "DOCE ";
                    else if (unidades == 3) rpta += "TRECE ";
                    else if (unidades == 4) rpta += "CATORCE ";
                    else if (unidades == 5) rpta += "QUINCE ";
                    else if (unidades > 5) rpta += "DIECI";
                    else rpta += "DIEZ ";
                    break;
                case 2: rpta += (unidades > 0 ? "VEINTI" : "VEINTE "); break;
                case 3: rpta += (unidades > 0 ? "TREINTI" : "TREINTA "); break;
                case 4: rpta += (unidades > 0 ? "CUARENTI" : "CUARENTA "); break;
                case 5: rpta += (unidades > 0 ? "CINCUENTI" : "CINCUENTA "); break;
                case 6: rpta += (unidades > 0 ? "SESENTI" : "SESENTA "); break;
                case 7: rpta += (unidades > 0 ? "SETENTI" : "SETENTA "); break;
                case 8: rpta += (unidades > 0 ? "OCHENTI" : "OCHENTA "); break;
                case 9: rpta += (unidades > 0 ? "NOVENTI" : "NOVENTA "); break;
            }
            switch (unidades)
            {
                case 0: rpta += (centenas + decenas > 0 ? "" : "CERO "); break;
                case 1: rpta += (decenas == 1 ? "" : "UNO "); break;
                case 2: rpta += (decenas == 1 ? "" : "DOS "); break;
                case 3: rpta += (decenas == 1 ? "" : "TRES "); break;
                case 4: rpta += (decenas == 1 ? "" : "CUATRO "); break;
                case 5: rpta += (decenas == 1 ? "" : "CINCO "); break;
                case 6: rpta += "SEIS "; break;
                case 7: rpta += "SIETE "; break;
                case 8: rpta += "OCHO "; break;
                case 9: rpta += "NUEVE "; break;
            }

            return rpta;
        }

        public static string Process(decimal number)
        {
            string rpta = string.Empty;
            int n = (int)number;

            int millones = n / 1000000;
            n = n % 1000000;
            if (millones > 0)
            {
                rpta += ToTextCentena(millones);
                rpta += (millones == 1 ? "MILLON " : "MILLONES ");
            }
            int miles = n / 1000;
            n = n % 1000;
            if (miles > 0)
            {
                rpta += ToTextCentena(miles);
                rpta += "MIL ";
            }
            int unidades = n;
            if (unidades >= 0)
            {
                rpta += ToTextCentena(unidades);
            }

            rpta += string.Format("CON {0}/100", number.ToString("N2").Split('.')[1]);
            return rpta;
        }
    }
}
